/**
 * Description:
 * Class Name:ErrorUtils
 * Date:2022/4/17 15:31
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第14章_Annotation注解._14_1_基本注解._14_1_4_堆污染警告与Java9增强的SafeVarargs;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class ErrorUtils {
    public static void faultyMethod(List<String>... listStrArray){     // 形参个数可变的写法，多个参数值会被当成数组传入
        // 由于该方法的形参是List<String>...类型，个数可变的形参相当于数组
        // 但Java又不支持泛型数组，因此程序若把把List<String>...当成List[]处理，就发生了堆污染——因为
        // 其实这里是刻意要出现错误才这样做的，如果直接用List<String>[]来声明的话，就会让后续的myList.add(...)编译不成功，因为后面的List<Integer>与List<String>不匹配。
        List<String>[] listArray = listStrArray;
        List<String> myList = new ArrayList<>();
        myList.add(Integer.toString(new Random().nextInt(100)));

        // 把listArray的第一个元素赋为myArray
        listArray[0] = myList;
        String s = listStrArray[0].get(0);
    }
    public static void main(String[] args) {
        ErrorUtils.faultyMethod(Arrays.asList("Hello!"), Arrays.asList("World!"));
    }
}
